package com.bflow.api;

import com.bflow.api.bo.BflowDefineProcessBo;
import com.bflow.api.bo.BflowDefineProcessQueryParam;
import com.bflow.commons.bean.PageResult;
import com.bflow.commons.exception.BizException;
import com.bflow.commons.po.BasePo;
import com.bflow.commons.service.IBaseService;

import java.io.Serializable;

/**
 * 功能：BflowDefineProcess 流程定义-业务接口
 * 作者：haowen
 * 日期：2018-12-13
 */
public interface IBflowDefineProcessService<P extends BasePo, B extends Serializable> extends IBaseService<P, B> {
    /**
     * 保存
     * @param bo
     * @return
     */
    void save(BflowDefineProcessBo bo) throws BizException;

    /**
     * 部署
     * @param id
     * @return
     */
    void deploy(String id) throws BizException;

    BflowDefineProcessBo detail(String id);

    BflowDefineProcessBo getCache(String id);

    /**
     * 获取 流程最新 版本号
     * @param procKey
     * @return
     */
    Integer getLastProcessVersion(String procKey);

    /**
     * 获取流程模型信息
     * @param procKey
     * @return
     */
    BflowDefineProcessBo getFlowModelBykey(String procKey);

    /**
     * 插入流程定义数据
     * @param bo
     * @return
     * @throws BizException
     */
    String add(BflowDefineProcessBo bo)throws BizException;

    /**
     * 查询流程列表及任务关联业务分页数据
     * @param queryParam
     * @return
     * @throws BizException
     */
    PageResult<BflowDefineProcessBo> findProcessInstancePage(BflowDefineProcessQueryParam queryParam) throws BizException;

    /**
     * 查询流程列表及任务关联业务分页记录数
     * @param queryParam
     * @return
     * @throws BizException
     */
    long findProcessInstancePageCount(BflowDefineProcessQueryParam queryParam) throws BizException;

}
